import matplotlib
# 设置 Matplotlib 后端为 TkAgg
matplotlib.use('TkAgg')
# 配置 Matplotlib 以支持中文显示和负号
matplotlib.rcParams["font.sans-serif"] = ["SimHei"]
matplotlib.rcParams["axes.unicode_minus"] = False
import matplotlib.pyplot as plt
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg


fig = plt.figure(dpi=100)  设置分辨率
fig.set_facecolor('deepskyblue')  设置背景色
fig.subplots_adjust(left=0.05, bottom=0.08, right=0.98, top=0.92)   # 设置边距
# fig.canvas 的具体实现取决于你使用的 Matplotlib 后端。不同的后端（如 TkAgg、Qt5Agg、WebAgg 等）可能有不同的 canvas 实现，但它们通常都提供了 draw() 方法来重新绘制图形
# fig.canvas.update()  # 不会重新绘制整个图形，而只是更新那些已经改变的部分  ！！！！ 有问题
# fig.canvas.flush_events() 来处理所有挂起的事件（如按键或鼠标事件）
# fig.savefig() 直接将图形保存到文件中不在屏幕上显示

# canvas = FigureCanvasTkAgg(fig, master=Tk()).get_tk_widget()  # 将fig放在画布上 与 通过tkinter展示
# canvas.pack(fill='both', expand=True)

ax = fig.add_subplot(111)  # 在第一行第一列添加一个Axes 对象 (111)总1行 总1列 位置1  (212)总共2行 总共1列 位置2
# ax.clear()   # 清除单个Axes 对象的内容而不影响其他子图
# fig.clear()  # 清除所有 Axes 对象的内容
ax.plot(xlit, list, color='red', linewidth=1)  # 设置当前Axes对象的内容
ax.patch.set_facecolor("white")  # 设置当前Axes对象的背景色
ax.set_yticks([i for i in range(-20, 21, 2)])  # 设置y轴刻度
ax.set_xlim((0, 50))  # 设置x轴刻度范围
ax.set_title('m/$s^2$', loc='left', fontdict={'color': 'black', 'size': 10})  # 设置当前Axes对象的标题
ax.spines['top'].set_visible(False)  # 设置当前Axes对象上方线条是否显示  top, left, right, bottom
ax.tick_params(labelsize=8)  # 设置当前Axes对象刻度字体大小
ax.xaxis.grid(color='#808080', linestyle='-', linewidth=1, alpha=0.5)    # 设置当前Axes对象x轴网格线
ax.yaxis.grid(color='#808080', linestyle='-', linewidth=1, alpha=0.5)    # 设置当前Axes对象y轴网格线
ax.legend([f'线条' for i in range(list_long)], loc='upper left', fontsize=8)  # 设置当前Axes对象线条备注

fig.canvas.draw()  # 全部重新绘制 对 Figure 对象或其子对象（如 Axes）进行更改后，调用 fig.canvas.draw() 可以确保这些更改在图形窗口中可见

# 更新当前Axes对象内容
# ax.set_data(xlist, ylist)
# fig.canvas.draw()  # 立即重绘图形会阻塞当前线程，直到重绘操作完成

# fig.canvas.draw_idle()  # 在 Matplotlib 的事件循环空闲时重绘图形


# plt.close(fig)  # 释放plt资源(不释放会导致tkinter不能正常退出)
